<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>ANTLR Task</title>
</head>

<body>

<h2 id="antlr">ANTLR</h2>
<h3>Description</h3>
<p>Invokes the <a href="https://www.antlr.org/" target="_top">ANTLR</a> Translator generator on a
grammar file.</p>
<p>To use the ANTLR task, set the <var>target</var> attribute to the name of the grammar file to
process.  Optionally, you can also set the <var>outputdirectory</var> to write the generated file to
a specific directory.  Otherwise ANTLR writes the generated files to the directory containing the
grammar file.</p>
<p>This task only invokes ANTLR if the grammar file (or the supergrammar specified by
the <var>glib</var> attribute) is newer than the generated files.</p>
<p><strong>Note</strong>: This task depends on external libraries not included in the Apache Ant
distribution. See <a href="../install.html#librarydependencies">Library Dependencies</a> for more
information.</p>
<p>Antlr 2.7.2 Note: <em>You will need <samp>antlrall.jar</samp> that can be created by
the <q>antlr-all.jar</q> target of the Makefile provided with the download.</em></p>

<h3>Parameters</h3>
<table class="attr">
  <tr>
    <th scope="col">Attribute</th>
    <th scope="col">Description</th>
    <th scope="col">Required</th>
  </tr>
  <tr>
    <td>target</td>
    <td>The grammar file to process.</td>
    <td>Yes</td>
  </tr>
  <tr>
    <td>outputdirectory</td>
    <td>The directory to write the generated files to.</td>
    <td>No; defaults to the directory containing the grammar file</td>
  </tr>
  <tr>
    <td>glib</td>
    <td>An optional super grammar file that the target grammar overrides.  This feature is only
      needed for advanced vocabularies.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>debug</td>
    <td>When set to <q>yes</q>, this flag adds code to the generated parser that will launch the
      ParseView debugger upon invocation.<br/>  Note: ParseView is a separate component that needs
      to be installed or your grammar will have compilation errors.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>html</td>
    <td>Emit an HTML version of the grammar with hyperlinked actions if set to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>diagnostic</td>
    <td>Generate a text file with debugging information based on the target grammar if set
      to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>trace</td>
    <td>Force <strong>all</strong> rules to call traceIn/traceOut if set to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>traceParser</td>
    <td>Only force parser rules to call traceIn/traceOut if set to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>traceLexer</td>
    <td>Only force lexer rules to call traceIn/traceOut if set to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <tr>
    <td>traceTreeWalker</td>
    <td>Only force tree walker rules to call traceIn/traceOut if set to <q>yes</q>.</td>
    <td>No; default is <q>no</q></td>
  </tr>
  <!--tr>
    <td>fork</td>
    <td>Run ANTLR in a separate JVM.</td>
    <td>No; default is <q>off</q></td>
  </tr-->
  <tr>
    <td>dir</td>
    <td>The directory to invoke JVM in.<!--(ignored if fork is disabled)--></td>
    <td>No</td>
  </tr>
</table>

<h3 id="nested">Parameters specified as nested elements</h3>

<p>The task supports a nested <code>&lt;classpath&gt;</code> element, that represents
a <a href="../using.html#path">path-like structure</a>. It is given as a convenience if you have to
specify the original ANTLR directory. In most cases, dropping the appropriate ANTLR jar in the
normal Ant lib repository will be enough.</p>

<h4>jvmarg</h4>

<p><!--If fork is enabled, -->Additional parameters may be passed to the new JVM via
nested <code>&lt;jvmarg&gt;</code> attributes, for example:</p>

<pre>
&lt;antlr target="..."&gt;
  &lt;jvmarg value=&quot;-Djava.compiler=NONE&quot;/&gt;
  ...
&lt;/antlr&gt;</pre>

<p>would run ANTLR in a JVM without JIT.</p>

<p><code>&lt;jvmarg&gt;</code> allows all attributes described
in <a href="../using.html#arg">Command line arguments</a>.</p>

<h3>Example</h3>
<p>Invoke ANTLR on grammar file <samp>etc/java.g</samp>, writing the generated files
to <samp>build/src</samp>:</p>
<pre>
&lt;antlr
    target=&quot;etc/java.g&quot;
    outputdirectory=&quot;build/src&quot;/&gt;</pre>

</body>
</html>
